package com.责任链;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 *链表驱动类
 */
@Service
public class ChainDriver {

    //头节点
    private AbstractChainElement headNode;

    //组装链表
    @Autowired
    public void init(List<AbstractChainElement> chainElementList){
        AbstractChainElement preNode=null;
        for (AbstractChainElement element : chainElementList) {
            if (headNode==null){
                headNode=element;
                preNode=element;
            }else {
                preNode.next=element;
                preNode=element;
            }
        }
    }

    //驱动方法，在这里使用do-while的方式向后驱调用
    public void process(){
        AbstractChainElement next=headNode.next;
        do {
            next.invok();
        }while ((next=next.next)!=null);
    }
}
